package cn.iocoder.yudao.module.member.eid.service;

import cn.hutool.core.collection.CollUtil;
import cn.iocoder.yudao.framework.common.pojo.PageResult;
import cn.iocoder.yudao.module.member.eid.dal.dataobject.MemberEidDO;
import cn.iocoder.yudao.module.member.eid.vo.AppEidSaveReqVO;
import cn.iocoder.yudao.module.member.eid.vo.EidAuditReqVO;
import cn.iocoder.yudao.module.member.eid.vo.EidPageReqVO;
import jakarta.validation.Valid;

import java.util.Map;
import java.util.Set;

/**
 * 实名信息 Service 实现类
 *
 * @author 山野羡民
 */
public interface MemberEidService {

    /**
     * 保存实名信息
     *
     * @param userId 用户编号
     * @param reqVO  请求信息
     * @return 状态：0-待审核、1-已通过、2-被驳回
     */
    Integer saveIdcard(Long userId, @Valid AppEidSaveReqVO reqVO);

    /**
     * 审核实名信息
     *
     * @param reqVO 请求信息
     */
    void updateAudit(EidAuditReqVO reqVO);

    /**
     * 获得实名信息
     *
     * @param id 编号
     * @return 实名信息
     */
    MemberEidDO getIdcard(Long id);

    /**
     * 获得实名信息
     *
     * @param userId 用户编号
     * @return 实名信息
     */
    MemberEidDO getIdcardByUserId(Long userId);


    /**
     * 检查是否已实名认证
     *
     * @param userId 用户编号
     */
    default boolean checkIdcardVerified(Long userId) {
        Map<Long, Boolean> map = checkIdcardVerified(CollUtil.newHashSet(userId));
        if (CollUtil.isEmpty(map)) {
            return false;
        }
        return Boolean.TRUE.equals(map.get(userId));
    }

    /**
     * 检查是否已实名认证
     *
     * @param userIds 用户编号数组
     */
    Map<Long, Boolean> checkIdcardVerified(Set<Long> userIds);

    /**
     * 获得实名信息分页
     *
     * @param pageReqVO 分页查询
     * @return 实名信息分页
     */
    PageResult<MemberEidDO> getIdcardPage(EidPageReqVO pageReqVO);

}
